home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / ddj0897.zip / RCSC.ZIP / LIB51 / IS.C < prev    next >
Text File  |  1997-01-12  |  3KB  |  137 lines

  1. /*
  2. ** All character classification functions except isascii().
  3. ** Integer argument (c) must be in ASCII range (0-127) for
  4. ** dependable answers.
  5. **
  6. ** Modified by Andy W. K. Yuen to make it more efficient 
  7. ** for the 8051
  8. */
  9.  
  10. #asm
  11.  
  12. ALNUM equ    1
  13. ALPHA equ    2
  14. CNTRL equ    4
  15. DIGIT equ    8
  16. GRAPH equ    16
  17. LOWER equ    32
  18. PRINT equ    64
  19. PUNCT equ    128
  20. BLANK equ    256
  21. UPPER equ    512
  22. XDIGIT equ    1024
  23.  
  24. __is:
  25.     MOV    A,V1L
  26.     RL    A
  27.     MOV    V1L,A
  28.     LCALL    __getvalue
  29.     MOV    V1H,A
  30.     MOV    A,V1L
  31.     INC    A
  32.     LCALL    __getvalue
  33.     MOV    V1L,A
  34.     RET
  35.  
  36. __getvalue:
  37.     CJNE    A,#255,__lookup
  38.     MOV    A,#4
  39.     RET
  40. __lookup:
  41.     INC    A
  42.     MOVC    A,@A+PC
  43.     RET
  44.     
  45. DW  0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004
  46. DW  0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004
  47. DW  0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004
  48. DW  0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004
  49. DW  0x140, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0
  50. DW  0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0
  51. DW  0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459
  52. DW  0x459, 0x459, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0
  53. DW  0x0D0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253
  54. DW  0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253
  55. DW  0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253
  56. DW  0x253, 0x253, 0x253, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0
  57. DW  0x0D0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073
  58. DW  0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073
  59. DW  0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073
  60. DW  0x073, 0x073, 0x073, 0x0D0, 0x0D0, 0x0D0, 0x0D0
  61.  
  62. DB  0x00
  63.  
  64. define(`ANDVAL',
  65. `GETw1s(4)
  66. LCALL    __is
  67. OPxn(ANL, ANL, V1L, V1H, LOW ($1), HIGH ($1))')
  68.  
  69. #endasm
  70.  
  71. isalnum (c) int c; {
  72. #asm
  73. ANDVAL(ALNUM)
  74. #endasm
  75. } /* 'a'-'z', 'A'-'Z', '0'-'9' */
  76.  
  77. isalpha (c) int c; {
  78. #asm
  79. ANDVAL(ALPHA)
  80. #endasm
  81. } /* 'a'-'z', 'A'-'Z' */
  82.  
  83. iscntrl (c) int c; {
  84. #asm
  85. ANDVAL(CNTRL)
  86. #endasm
  87. } /* 0-31, 127 */
  88.  
  89. isdigit (c) int c; {
  90. #asm
  91. ANDVAL(DIGIT)
  92. #endasm
  93. } /* '0'-'9' */
  94.  
  95. isgraph (c) int c; {
  96. #asm
  97. ANDVAL(GRAPH)
  98. #endasm
  99. } /* '!'-'~' */
  100.  
  101. islower (c) int c; {
  102. #asm
  103. ANDVAL(LOWER)
  104. #endasm
  105. } /* 'a'-'z' */
  106.  
  107. isprint (c) int c; {
  108. #asm
  109. ANDVAL(PRINT)
  110. #endasm
  111. } /* ' '-'~' */
  112.  
  113. ispunct (c) int c; {
  114. #asm
  115. ANDVAL(PUNCT)
  116. #endasm
  117. } /* !alnum && !cntrl && !space */
  118.  
  119. isspace (c) int c; {
  120. #asm
  121. ANDVAL(BLANK)
  122. #endasm
  123. } /* HT, LF, VT, FF, CR, ' ' */
  124.  
  125. isupper (c) int c; {
  126. #asm
  127. ANDVAL(UPPER)
  128. #endasm
  129. } /* 'A'-'Z' */
  130.  
  131. isxdigit(c) int c; {
  132. #asm
  133. ANDVAL(XDIGIT)
  134. #endasm
  135. } /* '0'-'9', 'a'-'f', 'A'-'F' */
  136.  
  137.